﻿// 3584. 字符串的反码.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <string>

using namespace std;
/*
https://www.acwing.com/problem/content/3587/


一个二进制数，将其每一位取反，称之为这个数的反码。

下面我们定义一个字符的反码。

如果这是一个小写字符，则它和字符 a 的距离与它的反码和字符 z 的距离相同；
如果是一个大写字符，则它和字符 A 的距离与它的反码和字符 Z 的距离相同；如果不是上面两种情况，它的反码就是它自身。

举几个例子，a 的反码是 z；c 的反码是 x；W 的反码是 D；1 的反码还是 1；$ 的反码还是 $。

一个字符串的反码定义为其所有字符的反码。

我们的任务就是计算出给定字符串的反码。

输入格式
若干行，每行一个字符串。

最后一行只包含一个字符 !，表示输入结束，无需处理。

输出格式
对于输入的每个字符串，输出其反码，每个数据占一行。

数据范围
输入最多 10行有效字符串，每行不超过 80字符。

输入样例：
Hello
JLU-CCST-2011
!
输出样例：
Svool
QOF-XXHG-2011
*/

string str;

void solve() {
	for (int i = 0; i < str.size(); i++) {
		char c = str[i];
		if (c >= 'a' && c <= 'z') {
			str[i] = 'z' - (c - 'a');
		}
		else if (c >= 'A' && c <= 'Z') {
			str[i] = 'Z' - (c - 'A');
		}
	}
	cout << str << endl;
}

int main()
{
	while (cin >> str) {
		if (str == "!") break;
		solve();
	}

	return 0;
}

 